home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 681 / term / source.lha / RatePanel.c < prev    next >
C/C++ Source or Header  |  1992-05-09  |  19KB  |  697 lines

  1. /*
  2. **    $Id: RatePanel.c,v 1.4 92/04/21 16:59:29 olsen Sta Locker: olsen $
  3. **    $Revision: 1.4 $
  4. **    $Date: 92/04/21 16:59:29 $
  5. **
  6. **    Editing panel for phone units configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_PAY1,GAD_MINUTES1,GAD_START1,GAD_PAY2,GAD_MINUTES2,GAD_START2,
  15.         GAD_LIST,GAD_REMOVE,GAD_CLONE,GAD_ADDDAY,GAD_ADDDATE,GAD_EDIT,
  16.         GAD_IMPORT };
  17.  
  18. #define WIDTH    640
  19. #define HEIGHT    134
  20.  
  21. STATIC UBYTE * __saveds
  22. ShowTime(struct Gadget *SomeGadget,WORD Level)
  23. {
  24.     STATIC UBYTE Buffer[6];
  25.  
  26.     SPrintf(Buffer,"%2ld.%02ld",Level / 60,Level % 60);
  27.  
  28.     return(Buffer);
  29. }
  30.  
  31. STATIC UBYTE * __saveds
  32. ShowHour(struct Gadget *SomeGadget,WORD Level)
  33. {
  34.     STATIC UBYTE Buffer[6];
  35.  
  36.     SPrintf(Buffer,"%2ld:%02ld",Level / 6,(Level % 6) * 10);
  37.  
  38.     return(Buffer);
  39. }
  40.  
  41. STATIC struct Gadget *
  42. CreateAllGadgets(struct PhoneEntry *Entry,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  43. {
  44.     struct Gadget        *Gadget;
  45.     struct NewGadget     NewGadget;
  46.     UWORD             Counter = 0;
  47.  
  48.     memset(&NewGadget,0,sizeof(struct NewGadget));
  49.  
  50.     if(Gadget = CreateContext(GadgetList))
  51.     {
  52.         NewGadget . ng_LeftEdge        = 162;
  53.         NewGadget . ng_TopEdge        = 27;
  54.         NewGadget . ng_Width        = 101;
  55.         NewGadget . ng_Height        = 14;
  56.         NewGadget . ng_GadgetText    = SmallCurrency();
  57.         NewGadget . ng_TextAttr        = &DefaultFont;
  58.         NewGadget . ng_GadgetID        = Counter;
  59.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  60.         NewGadget . ng_VisualInfo    = VisualInfo;
  61.  
  62.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  63.             GT_Underscore,    '_',
  64.             GTIN_MaxChars,    8,
  65.             GTST_EditHook,    &CommandHook,
  66.             GA_Disabled,    TRUE,
  67.             GA_Immediate,    TRUE,
  68.         TAG_DONE);
  69.  
  70.         NewGadget . ng_TopEdge        = 42;
  71.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_SECONDS_PER_UNIT_GAD);
  72.         NewGadget . ng_GadgetID        = Counter;
  73.  
  74.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  75.             GT_Underscore,    '_',
  76.             GTIN_MaxChars,    8,
  77.             GTST_EditHook,    &CommandHook,
  78.             GA_Disabled,    TRUE,
  79.             GA_Immediate,    TRUE,
  80.         TAG_DONE);
  81.  
  82.         NewGadget . ng_TopEdge        = 57;
  83.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_START_TIME_GAD);
  84.         NewGadget . ng_GadgetID        = Counter;
  85.  
  86.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  87.             GT_Underscore,        '_',
  88.             GTSL_Max,        143,
  89.             GTSL_MaxLevelLen,    5,
  90.             GTSL_LevelFormat,    "%s",
  91.             GTSL_DispFunc,        ShowHour,
  92.             PGA_Freedom,        LORIENT_HORIZ,
  93.             GA_Immediate,        TRUE,
  94.             GA_RelVerify,        TRUE,
  95.             GA_Disabled,        TRUE,
  96.         TAG_DONE);
  97.  
  98.         NewGadget . ng_TopEdge        = 87;
  99.         NewGadget . ng_GadgetText    = SmallCurrency();
  100.         NewGadget . ng_GadgetID        = Counter;
  101.  
  102.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  103.             GT_Underscore,    '_',
  104.             GTIN_MaxChars,    8,
  105.             GTST_EditHook,    &CommandHook,
  106.             GA_Disabled,    TRUE,
  107.             GA_Immediate,    TRUE,
  108.         TAG_DONE);
  109.  
  110.         NewGadget . ng_TopEdge        = 102;
  111.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_SECONDS_PER_UNIT_GAD);
  112.         NewGadget . ng_GadgetID        = Counter;
  113.  
  114.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  115.             GT_Underscore,    '_',
  116.             GTIN_MaxChars,    8,
  117.             GTST_EditHook,    &CommandHook,
  118.             GA_Disabled,    TRUE,
  119.             GA_Immediate,    TRUE,
  120.         TAG_DONE);
  121.  
  122.         NewGadget . ng_TopEdge        = 117;
  123.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_START_TIME_GAD);
  124.         NewGadget . ng_GadgetID        = Counter;
  125.  
  126.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  127.             GT_Underscore,        '_',
  128.             GTSL_Max,        143,
  129.             GTSL_MaxLevelLen,    5,
  130.             GTSL_LevelFormat,    "%s",
  131.             GTSL_DispFunc,        ShowHour,
  132.             PGA_Freedom,        LORIENT_HORIZ,
  133.             GA_Immediate,        TRUE,
  134.             GA_RelVerify,        TRUE,
  135.             GA_Disabled,        TRUE,
  136.         TAG_DONE);
  137.  
  138.         NewGadget . ng_LeftEdge        = 267;
  139.         NewGadget . ng_TopEdge        = 27;
  140.         NewGadget . ng_Width        = 261;
  141.         NewGadget . ng_Height        = 104;
  142.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_DAYS_AND_DATES_GAD);
  143.         NewGadget . ng_GadgetID        = Counter;
  144.         NewGadget . ng_Flags        = PLACETEXT_ABOVE|NG_HIGHLABEL;
  145.  
  146.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  147.             GT_Underscore,        '_',
  148.             GTLV_Labels,        &Entry -> TimeDateList,
  149.             GTLV_ShowSelected,    NULL,
  150.         TAG_DONE);
  151.  
  152.         NewGadget . ng_LeftEdge        = 532;
  153.         NewGadget . ng_TopEdge        = 118;
  154.         NewGadget . ng_Width        = 99;
  155.         NewGadget . ng_Height        = 13;
  156.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_REMOVE_GAD);
  157.         NewGadget . ng_GadgetID        = Counter;
  158.         NewGadget . ng_Flags        = PLACETEXT_IN;
  159.  
  160.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  161.             GT_Underscore,    '_',
  162.             GA_Disabled,    TRUE,
  163.         TAG_DONE);
  164.  
  165.         NewGadget . ng_TopEdge        = 104;
  166.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_CLONE_GAD);
  167.         NewGadget . ng_GadgetID        = Counter;
  168.  
  169.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  170.             GT_Underscore,    '_',
  171.             GA_Disabled,    TRUE,
  172.         TAG_DONE);
  173.  
  174.         NewGadget . ng_TopEdge        = 41;
  175.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_ADD_DAYS_GAD);
  176.         NewGadget . ng_GadgetID        = Counter;
  177.  
  178.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  179.             GT_Underscore,    '_',
  180.         TAG_DONE);
  181.  
  182.         NewGadget . ng_TopEdge        = 27;
  183.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_ADD_DATE_GAD);
  184.         NewGadget . ng_GadgetID        = Counter;
  185.  
  186.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  187.             GT_Underscore,    '_',
  188.         TAG_DONE);
  189.  
  190.         NewGadget . ng_TopEdge        = 90;
  191.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_EDIT_GAD);
  192.         NewGadget . ng_GadgetID        = Counter;
  193.  
  194.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  195.             GT_Underscore,    '_',
  196.             GA_Disabled,    TRUE,
  197.         TAG_DONE);
  198.  
  199.         NewGadget . ng_TopEdge        = 55;
  200.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_IMPORT_GAD);
  201.         NewGadget . ng_GadgetID        = Counter;
  202.  
  203.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  204.             GT_Underscore,    '_',
  205.             GA_Disabled,    NumPhoneEntries < 2,
  206.         TAG_DONE);
  207.  
  208.         NewGadget . ng_LeftEdge        = 84;
  209.         NewGadget . ng_TopEdge        = 12;
  210.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_STARTING_TIME_GAD);
  211.         NewGadget . ng_Flags        = PLACETEXT_IN|NG_HIGHLABEL;
  212.         NewGadget . ng_GadgetID        = Counter;
  213.  
  214.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  215.             TAG_DONE);
  216.  
  217.         NewGadget . ng_LeftEdge        = 92;
  218.         NewGadget . ng_TopEdge        = 72;
  219.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_ENDING_TIME_GAD);
  220.         NewGadget . ng_GadgetID        = Counter;
  221.  
  222.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  223.             TAG_DONE);
  224.     }
  225.  
  226.     return(Gadget);
  227. }
  228.  
  229. STATIC VOID __regargs
  230. DisableGadgets(struct Gadget **GadgetArray,struct Window *PanelWindow,BYTE Mode)
  231. {
  232.     GT_SetGadgetAttrs(GadgetArray[GAD_PAY1],PanelWindow,NULL,
  233.         GA_Disabled,    Mode,
  234.     TAG_DONE);
  235.  
  236.     GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES1],PanelWindow,NULL,
  237.         GA_Disabled,    Mode,
  238.     TAG_DONE);
  239.  
  240.     GT_SetGadgetAttrs(GadgetArray[GAD_START1],PanelWindow,NULL,
  241.         GA_Disabled,    Mode,
  242.     TAG_DONE);
  243.  
  244.     GT_SetGadgetAttrs(GadgetArray[GAD_PAY2],PanelWindow,NULL,
  245.         GA_Disabled,    Mode,
  246.     TAG_DONE);
  247.  
  248.     GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES2],PanelWindow,NULL,
  249.         GA_Disabled,    Mode,
  250.     TAG_DONE);
  251.  
  252.     GT_SetGadgetAttrs(GadgetArray[GAD_START2],PanelWindow,NULL,
  253.         GA_Disabled,    Mode,
  254.     TAG_DONE);
  255.  
  256.     if(Mode)
  257.         ActiveGadget = NULL;
  258. }
  259.  
  260. STATIC struct Node * __regargs
  261. GetNode(struct List *List,LONG Offset)
  262. {
  263.     struct Node    *Node;
  264.     LONG         i;
  265.  
  266.     Node = (struct Node *)List -> lh_Head;
  267.  
  268.     for(i = 0 ; i < Offset ; i++)
  269.     {
  270.         if(!Node -> ln_Succ -> ln_Succ)
  271.             return(NULL);
  272.  
  273.         Node = Node -> ln_Succ;
  274.     }
  275.  
  276.     return(Node);
  277. }
  278.  
  279. VOID
  280. RatePanel(struct List *PhoneList,struct PhoneEntry *Entry)
  281. {
  282.     struct Window    *PanelWindow;
  283.     struct Gadget    *GadgetList;
  284.     struct Gadget    *GadgetArray[GAD_IMPORT + 1 + 2];
  285.  
  286.     if(CreateAllGadgets(Entry,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  287.     {
  288.         if(PanelWindow = OpenWindowTags(NULL,
  289.             WA_Left,    (Screen -> Width - WIDTH) >> 1,
  290.             WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  291.             WA_Width,    WIDTH,
  292.             WA_Height,    HEIGHT,
  293.             WA_Activate,    TRUE,
  294.             WA_DragBar,    TRUE,
  295.             WA_DepthGadget,    TRUE,
  296.             WA_RMBTrap,    TRUE,
  297.             WA_DepthGadget,    TRUE,
  298.             WA_CloseGadget,    TRUE,
  299.             WA_CustomScreen,Screen,
  300.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | BUTTONIDCMP | INTEGERIDCMP | SLIDERIDCMP | LISTVIEWIDCMP,
  301.             WA_Title,    LocaleString(MSG_RATEPANEL_RATES_PREFERENCES_TXT),
  302.         TAG_DONE))
  303.         {
  304.             struct IntuiMessage    *Massage;
  305.             ULONG             Class,Code;
  306.             struct Gadget        *Gadget;
  307.             BYTE             Terminated = FALSE;
  308.             LONG             Selected = ~0,Count = 0;
  309.             struct TimeDateNode    *TimeDateNode,*NewNode;
  310.  
  311.             TimeDateNode = (struct TimeDateNode *)Entry -> TimeDateList . mlh_Head;
  312.  
  313.             while(TimeDateNode -> VanillaNode . ln_Succ)
  314.             {
  315.                 Count++;
  316.  
  317.                 TimeDateNode = (struct TimeDateNode *)TimeDateNode -> VanillaNode . ln_Succ;
  318.             }
  319.  
  320.             PushWindow(PanelWindow);
  321.  
  322.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  323.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  324.             GT_RefreshWindow(PanelWindow,NULL);
  325.  
  326.             ActiveGadget = NULL;
  327.  
  328.             while(!Terminated)
  329.             {
  330.                 WaitPort(PanelWindow -> UserPort);
  331.  
  332.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  333.                 {
  334.                     Class    = Massage -> Class;
  335.                     Code    = Massage -> Code;
  336.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  337.  
  338.                     GT_ReplyIMsg(Massage);
  339.  
  340.                     if(Class == IDCMP_VANILLAKEY)
  341.                         KeySelect(GadgetArray,GAD_IMPORT,Code,PanelWindow,&Gadget,&Class,&Code);
  342.  
  343.                     if(Class == IDCMP_GADGETDOWN)
  344.                     {
  345.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  346.                             ActiveGadget = Gadget;
  347.                     }
  348.  
  349.                     if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  350.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  351.  
  352.                     if(Class == IDCMP_CLOSEWINDOW)
  353.                         Terminated = TRUE;
  354.  
  355.                     if(Class == IDCMP_MOUSEMOVE)
  356.                     {
  357.                         switch(Gadget -> GadgetID)
  358.                         {
  359.                             case GAD_START1:TimeDateNode -> TimeDate . TimeOfDay[0] = Code;
  360.                                     break;
  361.  
  362.                             case GAD_START2:TimeDateNode -> TimeDate . TimeOfDay[1] = Code;
  363.                                     break;
  364.                         }
  365.                     }
  366.  
  367.                     if(Class == IDCMP_GADGETUP)
  368.                     {
  369.                         switch(Gadget -> GadgetID)
  370.                         {
  371.                             case GAD_PAY1:    TimeDateNode -> TimeDate . PayPerUnit[0] = GT_INTEGER(Gadget);
  372.                                     break;
  373.  
  374.                             case GAD_PAY2:    TimeDateNode -> TimeDate . PayPerUnit[1] = GT_INTEGER(Gadget);
  375.                                     break;
  376.  
  377.                             case GAD_MINUTES1:
  378.                                     TimeDateNode -> TimeDate . SecPerUnit[0] = GT_INTEGER(Gadget);
  379.                                     break;
  380.  
  381.                             case GAD_MINUTES2:
  382.                                     TimeDateNode -> TimeDate . SecPerUnit[1] = GT_INTEGER(Gadget);
  383.                                     break;
  384.  
  385.                             case GAD_START1:TimeDateNode -> TimeDate . TimeOfDay[0] = Code;
  386.                                     break;
  387.  
  388.                             case GAD_START2:TimeDateNode -> TimeDate . TimeOfDay[1] = Code;
  389.                                     break;
  390.  
  391.                             case GAD_LIST:    Selected = Code;
  392.  
  393.                                     DisableGadgets(GadgetArray,PanelWindow,FALSE);
  394.  
  395.                                     TimeDateNode = (struct TimeDateNode *)GetNode((struct List *)&Entry -> TimeDateList,Selected);
  396.  
  397.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PAY1],PanelWindow,NULL,
  398.                                         GTIN_Number,    TimeDateNode -> TimeDate . PayPerUnit[0],
  399.                                     TAG_DONE);
  400.  
  401.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES1],PanelWindow,NULL,
  402.                                         GTIN_Number,    TimeDateNode -> TimeDate . SecPerUnit[0],
  403.                                     TAG_DONE);
  404.  
  405.                                     GT_SetGadgetAttrs(GadgetArray[GAD_START1],PanelWindow,NULL,
  406.                                         GTSL_Level,    TimeDateNode -> TimeDate . TimeOfDay[0],
  407.                                     TAG_DONE);
  408.  
  409.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PAY2],PanelWindow,NULL,
  410.                                         GTIN_Number,    TimeDateNode -> TimeDate . PayPerUnit[1],
  411.                                     TAG_DONE);
  412.  
  413.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES2],PanelWindow,NULL,
  414.                                         GTIN_Number,    TimeDateNode -> TimeDate . SecPerUnit[1],
  415.                                     TAG_DONE);
  416.  
  417.                                     GT_SetGadgetAttrs(GadgetArray[GAD_START2],PanelWindow,NULL,
  418.                                         GTSL_Level,    TimeDateNode -> TimeDate . TimeOfDay[1],
  419.                                     TAG_DONE);
  420.  
  421.                                     if(Selected)
  422.                                     {
  423.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  424.                                             GA_Disabled,    FALSE,
  425.                                         TAG_DONE);
  426.  
  427.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  428.                                             GA_Disabled,    FALSE,
  429.                                         TAG_DONE);
  430.  
  431.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  432.                                             GA_Disabled,    FALSE,
  433.                                         TAG_DONE);
  434.                                     }
  435.                                     else
  436.                                     {
  437.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  438.                                             GA_Disabled,    TRUE,
  439.                                         TAG_DONE);
  440.  
  441.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  442.                                             GA_Disabled,    TRUE,
  443.                                         TAG_DONE);
  444.  
  445.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  446.                                             GA_Disabled,    TRUE,
  447.                                         TAG_DONE);
  448.                                     }
  449.  
  450.                                     break;
  451.  
  452.                             case GAD_IMPORT:BlockWindow(PanelWindow);
  453.  
  454.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  455.                                         GTLV_Labels,    ~0,
  456.                                     TAG_DONE);
  457.  
  458.                                     ImportPanel(Entry,PhoneList);
  459.  
  460.                                     DisableGadgets(GadgetArray,PanelWindow,TRUE);
  461.  
  462.                                     GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  463.                                         GA_Disabled,    TRUE,
  464.                                     TAG_DONE);
  465.  
  466.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  467.                                         GA_Disabled,    TRUE,
  468.                                     TAG_DONE);
  469.  
  470.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  471.                                         GA_Disabled,    TRUE,
  472.                                     TAG_DONE);
  473.  
  474.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  475.                                         GTLV_Labels,    &Entry -> TimeDateList,
  476.                                         GTLV_Selected,    ~0,
  477.                                     TAG_DONE);
  478.  
  479.                                     ActiveGadget = NULL;
  480.  
  481.                                     ReleaseWindow(PanelWindow);
  482.                                     break;
  483.  
  484.                             case GAD_ADDDAY:
  485.                             case GAD_ADDDATE:
  486.  
  487.                                     BlockWindow(PanelWindow);
  488.  
  489.                                     if(NewNode = CreateTimeDateNode(0,1,""))
  490.                                     {
  491.                                         APTR OldActiveGadget = ActiveGadget;
  492.                                         BYTE Result;
  493.  
  494.                                         if(Gadget -> GadgetID == GAD_ADDDAY)
  495.                                         {
  496.                                             NewNode -> TimeDate . Month    = -1;
  497.                                             NewNode -> TimeDate . Day    = 0;
  498.  
  499.                                             Result = DayPanel(&NewNode -> TimeDate);
  500.                                         }
  501.                                         else
  502.                                             Result = DatePanel(&NewNode -> TimeDate);
  503.  
  504.                                         if(Result)
  505.                                         {
  506.                                             AdaptTimeDateNode(NewNode);
  507.  
  508.                                             GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  509.                                                 GTLV_Labels,    ~0,
  510.                                             TAG_DONE);
  511.  
  512.                                             AddTail((struct List *)&Entry -> TimeDateList,&NewNode -> VanillaNode);
  513.  
  514.                                             GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  515.                                                 GTLV_Labels,    &Entry -> TimeDateList,
  516.                                                 GTLV_Selected,    Count++,
  517.                                             TAG_DONE);
  518.  
  519.                                             TimeDateNode = NewNode;
  520.  
  521. Redisplay:                                            DisableGadgets(GadgetArray,PanelWindow,FALSE);
  522.  
  523.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAY1],PanelWindow,NULL,
  524.                                                 GTIN_Number,    TimeDateNode -> TimeDate . PayPerUnit[0],
  525.                                             TAG_DONE);
  526.  
  527.                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES1],PanelWindow,NULL,
  528.                                                 GTIN_Number,    TimeDateNode -> TimeDate . SecPerUnit[0],
  529.                                             TAG_DONE);
  530.  
  531.                                             GT_SetGadgetAttrs(GadgetArray[GAD_START1],PanelWindow,NULL,
  532.                                                 GTSL_Level,    TimeDateNode -> TimeDate . TimeOfDay[0],
  533.                                             TAG_DONE);
  534.  
  535.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAY2],PanelWindow,NULL,
  536.                                                 GTIN_Number,    TimeDateNode -> TimeDate . PayPerUnit[1],
  537.                                             TAG_DONE);
  538.  
  539.                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES2],PanelWindow,NULL,
  540.                                                 GTIN_Number,    TimeDateNode -> TimeDate . SecPerUnit[1],
  541.                                             TAG_DONE);
  542.  
  543.                                             GT_SetGadgetAttrs(GadgetArray[GAD_START2],PanelWindow,NULL,
  544.                                                 GTSL_Level,    TimeDateNode -> TimeDate . TimeOfDay[1],
  545.                                             TAG_DONE);
  546.  
  547.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  548.                                                 GA_Disabled,    FALSE,
  549.                                             TAG_DONE);
  550.  
  551.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  552.                                                 GA_Disabled,    FALSE,
  553.                                             TAG_DONE);
  554.  
  555.                                             GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  556.                                                 GA_Disabled,    FALSE,
  557.                                             TAG_DONE);
  558.  
  559.                                             ActivateGadget(GadgetArray[GAD_PAY1],PanelWindow,NULL);
  560.  
  561.                                             ActiveGadget = GadgetArray[GAD_PAY1];
  562.                                         }
  563.                                         else
  564.                                         {
  565.                                             FreeVec(NewNode);
  566.  
  567.                                             if(ActiveGadget = OldActiveGadget)
  568.                                                 ActivateGadget(OldActiveGadget,PanelWindow,NULL);
  569.                                         }
  570.                                     }
  571.  
  572.                                     ReleaseWindow(PanelWindow);
  573.                                     break;
  574.  
  575.                             case GAD_REMOVE:if(--Count)
  576.                                     {
  577.                                         if(TimeDateNode -> VanillaNode . ln_Succ -> ln_Succ)
  578.                                             NewNode = (struct TimeDateNode *)TimeDateNode -> VanillaNode . ln_Succ;
  579.                                         else
  580.                                             NewNode = (struct TimeDateNode *)TimeDateNode -> VanillaNode . ln_Pred;
  581.                                     }
  582.  
  583.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  584.                                         GTLV_Labels,    ~0,
  585.                                     TAG_DONE);
  586.  
  587.                                     Remove(TimeDateNode);
  588.  
  589.                                     FreeVec(TimeDateNode);
  590.  
  591.                                     if(Count > 1)
  592.                                     {
  593.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  594.                                             GTLV_Labels,    &Entry -> TimeDateList,
  595.                                             GTLV_Selected,    Count,
  596.                                         TAG_DONE);
  597.  
  598.                                         TimeDateNode = NewNode;
  599.  
  600.                                         goto Redisplay;
  601.                                     }
  602.                                     else
  603.                                     {
  604.                                         DisableGadgets(GadgetArray,PanelWindow,TRUE);
  605.  
  606.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  607.                                             GA_Disabled,    TRUE,
  608.                                         TAG_DONE);
  609.  
  610.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  611.                                             GA_Disabled,    TRUE,
  612.                                         TAG_DONE);
  613.  
  614.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  615.                                             GA_Disabled,    TRUE,
  616.                                         TAG_DONE);
  617.  
  618.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  619.                                             GTLV_Labels,    &Entry -> TimeDateList,
  620.                                             GTLV_Selected,    ~0,
  621.                                         TAG_DONE);
  622.  
  623.                                         ActiveGadget = NULL;
  624.                                     }
  625.  
  626.                                     break;
  627.  
  628.                             case GAD_CLONE:    if(NewNode = CreateTimeDateNode(0,1,""))
  629.                                     {
  630.                                         CopyMem(TimeDateNode,NewNode,sizeof(struct TimeDateNode));
  631.  
  632.                                         NewNode -> VanillaNode . ln_Name = NewNode -> Buffer;
  633.  
  634.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  635.                                             GTLV_Labels,    ~0,
  636.                                         TAG_DONE);
  637.  
  638.                                         AddTail((struct List *)&Entry -> TimeDateList,&NewNode -> VanillaNode);
  639.  
  640.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  641.                                             GTLV_Labels,    &Entry -> TimeDateList,
  642.                                             GTLV_Selected,    Count++,
  643.                                         TAG_DONE);
  644.  
  645.                                         TimeDateNode = NewNode;
  646.  
  647.                                         goto Redisplay;
  648.                                     }
  649.  
  650.                                     break;
  651.  
  652.                             case GAD_EDIT:    GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  653.                                             GTLV_Labels,    ~0,
  654.                                         TAG_DONE);
  655.  
  656.                                         BlockWindow(PanelWindow);
  657.  
  658.                                         {
  659.                                             struct Gadget *OldActiveGadget = ActiveGadget;
  660.  
  661.                                             if(TimeDateNode -> TimeDate . Month == -1)
  662.                                                 DayPanel(&TimeDateNode -> TimeDate);
  663.                                             else
  664.                                                 DatePanel(&TimeDateNode -> TimeDate);
  665.  
  666.                                             AdaptTimeDateNode(TimeDateNode);
  667.  
  668.                                             GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  669.                                                 GTLV_Labels,    &Entry -> TimeDateList,
  670.                                                 GTLV_Selected,    Selected,
  671.                                             TAG_DONE);
  672.  
  673.                                             if(ActiveGadget = OldActiveGadget)
  674.                                                 ActivateGadget(OldActiveGadget,PanelWindow,NULL);
  675.                                         }
  676.  
  677.                                         ReleaseWindow(PanelWindow);
  678.  
  679.                                         break;
  680.  
  681.                             default:    break;
  682.                         }
  683.                     }
  684.                 }
  685.             }
  686.  
  687.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  688.  
  689.             PopWindow();
  690.  
  691.             CloseWindow(PanelWindow);
  692.         }
  693.  
  694.         FreeGadgets(GadgetList);
  695.     }
  696. }
  697.